#include <ximera/physics/ode/shape.hpp>


namespace ximera { namespace physics { namespace ode
{    
    Sphere::Sphere()
    {
        _geomID = dCreateSphere(0, 1);
    }

    Real Sphere::radius() const
    {
        return dGeomSphereGetRadius(_geomID);
    }

    void Sphere::radius(Real value)
    {
        dGeomSphereSetRadius(_geomID, value);
    }

    // --------------------------------------------

    Box::Box()
    {
        _geomID = dCreateBox(0, 1, 1, 1);
    }

    math::Vector3 Box::extents() const
    {
        math::Vector3 result;
        dGeomBoxGetLengths(_geomID, result.array());
        return result;
    }

    void Box::extents(math::Vector3 const& value)
    {
        dGeomBoxSetLengths(_geomID, value.x, value.y, value.z);
    }

    // --------------------------------------------

    Plane::Plane()
    {
        _geomID = dCreatePlane(0, 1, 0, 0, 0);
    }

    math::Plane Plane::plane() const
    {
        dVector4 result;
        dGeomPlaneGetParams(_geomID, result);
        return math::Plane(result);
    }

    void Plane::plane(math::Plane const& value)
    {
        dGeomPlaneSetParams(_geomID, value.normal.x, value.normal.y, value.normal.z, value.d);
    }

    // --------------------------------------------

    Mesh::Mesh()
    {
    }
}}}
